<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GeneralConvolution フィルタ</title>
<link rel="stylesheet" type="text/css" href="../../avisynth.css">
<link rel="stylesheet" type="text/css" href="../ja.css">
</head>
<body>
<h2><a name="Convolution"></a>GeneralConvolution</h2>

<p><code>GeneralConvolution </code>(<var>clip, int &quot;bias&quot;, string &quot;matrix&quot;, float &quot;divisor&quot;, bool &quot;auto&quot;</var>)</p>

<p>このフィルタは、RGB32 のクリップに対して、行列コンボリューション<a href="#footnote_1" class="footnote_link">*1</a>を実行します。</p>

<table border="1" width="75%">
  <tr>
    <td width="34%"><var>clip</var> </td>
    <td width="66%">RGB32 クリップ</td>
  </tr>
  <tr>
    <td width="34%"><var>bias</var> （デフォルト: 0）</td>
    <td width="66%">全体的な出力の強さを調節するための付加的なバイアス</td>
  </tr>
  <tr>
    <td width="34%"><var>matrix</var> （デフォルト: &quot;0 0 0 0 1 0 0 0 0&quot;）</td>
    <td width="66%">-256 から 256 までの 9 個ないし 25 個の整数からなる 3x3 または 5x5 の行列</td>
  </tr>
  <tr>
    <td width="34%"> <var>divisor</var> （デフォルト: 1.0）</td>
    <td width="66%">コンボリューションの出力をこの値で割る（bias を追加する前に計算される）</td>
  </tr>
  <tr>
    <td width="34%"><var>auto</var> （デフォルト: true）</td>
    <td width="66%">自動スケーリング機能を有効にする。自動スケーリングは、結果を行列の成分の合計で割る。<var>divisor</var> の値は、この自動スケーリングの倍率に追加で適用される。成分の合計が 0 なら、auto は無効になる。</td>
  </tr>
</table>
<p><var>divisor</var> は、通常、行列の成分の合計です。しかし、合計が 0 のとき、ピクセル値を訂正するために、<var>divisor</var> と <var>bias</var> の設定を使用することができます。コンボリューションの結果、ピクセル値が負になる場合、<var>bias</var> が役に立ちます。bias を追加したあと、ピクセルは 0（もし 255 より大きいなら 255）でクリッピングされます。
</p>
<p>縁の周辺では、行列に情報を提供するために、エッジのピクセルが単に反復されます。
</p>
<p>いくつかの使用例:
</p>
<pre># ぼかし:

GeneralConvolution(0, &quot;
   10 10 10 10 10
   10 10 10 10 10
   10 10 16 10 10
   10 10 10 10 10
   10 10 10 10 10 &quot;, 256, False)
</pre>
<pre># 水平方向のエッジ検出（ゾーベル法）:

GeneralConvolution(128, &quot;
    1  2  1
    0  0  0
   -1 -2 -1 &quot;, 8)</pre>

<pre># 垂直方向のエッジ検出（ゾーベル法）:

GeneralConvolution(128, &quot;
   1  0 -1
   2  0 -2
   1  0 -1 &quot;, 8)</pre>

<pre># 置換（単に「1」の位置を
# 左、右、上、下へ移動させる）

GeneralConvolution(0,&quot;
   0 1 0
   0 0 0
   0 0 0 &quot;)</pre>

<pre># 0.5 ピクセル上と置換<a href="#footnote_2" class="footnote_link">*2</a>（自動スケーリング）:

GeneralConvolution(0,&quot;
   0 1 0
   0 1 0
   0 0 0 &quot;)</pre>

<pre># 0.5 ピクセル右と置換<a href="#footnote_3" class="footnote_link">*3</a>（手動スケーリング）:

GeneralConvolution(0,&quot;
   0   0   0
   0 128 128
   0   0   0 &quot;, 256, False)</pre>

<pre># シャープフィルタ:

GeneralConvolution(0,&quot;
   0   -1   0
  -1    5  -1
   0   -1   0 &quot;, 1, True)

この場合、新しいピクセル値 y(m,n) は、以下の計算式によって与えられる
y(m,n) = (-1*x(m-1,n) - 1*x(m,n-1) + 5*x(m,n) - 1*x(m,n+1)
         - 1*x(m+1,n))/(-1-1+5-1-1)/1.0 + 0</pre>

<pre># 黒のレベルのクリッピングと 25% の明るさ増を伴う、軽いぼかしフィルタ:

GeneralConvolution(-16,&quot;
   0   12   0
  12  256  12
   0   12   0 &quot;, 0.75 ,True)

この場合、新しい画素の値 y(m,n) は、以下の計算式によって与えられる
y(m,n) = ( 12*x(m-1,n) + 12*x(m,n-1) + 256*x(m,n) + 12*x(m,n+1)
         + 12*x(m+1,n) )/(12+12+256+12+12)/0.75 - 16</pre>

<p>その他のいくつかの例が、<a href="http://www.gamedev.net/reference/programming/features/imageproc/page2.asp"><cite>こちら</cite></a>にあります。</p>
<p><b>更新履歴:</b></p>
<table border="1">
  <tbody>
    <tr>
      <td>v2</td>
      <td>初版</td>
    </tr>
    <tr>
      <td>v2.55</td>
      <td>divisor と auto を追加</td>
    </tr>
  </tbody>
</table>
<p><kbd>原文 Date: 2008/05/28 21:24:49</kbd><br>
<kbd>日本語訳 $Date: 2008/08/13 02:48:39 $</kbd></p>
<FORM>
<INPUT TYPE="Button" VALUE="戻る"
onClick="history.go(-1)">
</form>

<hr>
<div id="footnote">
<ul>
  <li>訳者註:
    <ul>
      <li><a name="footnote_1" class="footnote_link">*1</a> <span class="footnote_text">参考: <a href="http://www004.upp.so-net.ne.jp/iccii/usegimp/convolution.html">コンボリューション行列</a>、<a href="http://www.geocities.jp/gimpfile/gum_jp/33.html">Convolution Matrix</a></span></li>
      <li><a name="footnote_2" class="footnote_link">*2</a> <span class="footnote_text">結果的にクリップは下へ移動します。</span></li>
      <li><a name="footnote_3" class="footnote_link">*3</a> <span class="footnote_text">結果的にクリップは左へ移動します。</span></li>
    </ul>
  </li>
</ul>
</div>

</body>
</html>
